package com.tyk.bookstore.front.payment.strategy;

import com.tyk.bookstore.front.payment.strategy.enume.PayType;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.util.Map;

/**
 * @author tyk
 * @description PayActionFactory
 */
@SuppressWarnings("unchecked")
@Component
public class PayActionFactory {

    /**
     * 支付执行器Map
     */
    public static Map<String, PayAction<?>> map;

    /**
     * 通过构造方法注入执行器实例
     */
    public PayActionFactory(Map<String, PayAction<?>> map) {
        PayActionFactory.map = map;
    }


    /**
     * 根据支付类型构造支付执行器
     *
     * @param type 支付类型
     * @param <T>  参数类型
     * @return 执行器实例
     */
    public static <T> PayAction<T> build(PayType type) {
        return (PayAction<T>) map.get(StringUtils.uncapitalize(type.getClassName()));
    }

}
